package vistas.estructuras;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

public class ContenedorCiudad extends javax.swing.JPanel {
    Contenedor contenedor[][];
    
    public ContenedorCiudad() {
        setBackground(new Color(10, 204, 35));
        setPreferredSize(new Dimension(300, 300));
    }

    public void inicializar (int callesHorizontales, int callesVerticales) {
       int cantidadFilas = 2 * callesHorizontales + 1;
       int cantidadColumnas = 2 * callesVerticales + 1;

       this.contenedor = new Contenedor[cantidadFilas][cantidadColumnas];
       
       setLayout(new GridBagLayout());
       GridBagConstraints gbc = new GridBagConstraints();
       // Voy recorriendo la ciudad por filas
       for (int i = 0; i < cantidadFilas; i++) {
           // y a su vez por columnas
           for (int j = 0; j < cantidadColumnas; j++) {
               
               // Si una es par y la otra es impar se coloca una calle
               //if ((i%2 == 0 & j%2 == 1) || (i%2 == 1 & j%2 == 0)) {
        	   if ((i%2 == 0) && (j%2 == 1)) {
        		   
                   //Aca lo de siempre, la calle horizontal (creo)
            	   ContenedorCalleVertical panel = new ContenedorCalleVertical();
            	   contenedor[i][j] = panel;
            	   
                   gbc.gridx = j;
                   gbc.gridy = i;
                   gbc.fill = java.awt.GridBagConstraints.BOTH;
                   gbc.weightx = 0;
                   gbc.weighty = 1;
                   add(panel, gbc);
                   
               } else if ((i%2 == 1) && (j%2 == 0)) {
            	   ContenedorCalleHorizontal panel = new ContenedorCalleHorizontal();
            	   contenedor[i][j] = panel;
                   gbc.gridx = j;
                   gbc.gridy = i;
                   gbc.fill = java.awt.GridBagConstraints.BOTH;
                   gbc.weightx = 1;
                   gbc.weighty = 0;
                   add(panel, gbc);
                   
               }
               // Si ambas son impares se coloca una esquina
               else if (i%2 == 1 & j%2 == 1) {
                   ContenedorEsquina panel = new ContenedorEsquina();
            	   contenedor[i][j] = panel;
                   gbc.gridx = j;
                   gbc.gridy = i;
                   gbc.fill = java.awt.GridBagConstraints.BOTH;
                   gbc.weightx = 0;
                   gbc.weighty = 0;
                   add(panel, gbc);
               }
               // Si ambas son pares no se coloca nada en esa posicion
           }
       }
    }
    
    public void agregarObstruccion (String obstruccion, int x, int y) {
        ContenedorCalle calle = (ContenedorCalle) this.contenedor[x][y];
	calle.agregarObstruccion(obstruccion);
    }

    public void colocarVehiculoEnPosicion(int x, int y, String tipoDeVehiculo) {
        ContenedorEsquina esquina = (ContenedorEsquina) this.contenedor[x][y];
	esquina.colocarVehiculo(tipoDeVehiculo);
    }
    
    public void transparentarPanel(int posicionX, int posicionY) {
        try { 
            ContenedorEsquina esquina = (ContenedorEsquina) this.contenedor[posicionX][posicionY];
                       
            esquina.transparentarPanel();
        } catch (IndexOutOfBoundsException e) {
        }
    }

    public void colocarLineaDeLlegada(int x, int y) {
        ContenedorCalleHorizontal calle = (ContenedorCalleHorizontal) this.contenedor[x][y];
	calle.colocarLineaDeLlegada(x, y);
    }
}

